/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.marlboroug.categories;

import com.marlboroug.entity.Articles;
import com.marlboroug.entity.Categories;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;


@Stateless
public class CategoriesManager implements CategoriesManagerRemote {

    @PersistenceContext(unitName = "Marlboroug-ejbPU")
    EntityManager em;

    /** Permet de créer une catégorie
     * 
     * @param category Envoie un objet de type Categories
     * @return Un boolean pour confirmer la création
     */
    @Override
    public boolean create (Categories category) {       
        Boolean resultat = true; //Resultat de la recherche
        //On vérifie que username n'existe pas
        List<Categories> temp = findCreateCategory(category.getName());
        for (Categories n : temp) {
            resultat = false;
        } 
        if(resultat){
            em.persist(category);
            return true;
        }else {
            return false;
        }
    }

    /** Permet de supprimer une catégorie
     * 
     * @param ID_categories Envoie un ID d'une catégorie
     * @return Un boolean pour confirmer la suppression
     */
    @Override
    public boolean delete (Long ID_categories) {
        Categories category = em.find(Categories.class, ID_categories);
        em.remove(category);
        Categories temp = find(ID_categories);
        return temp == null;
    }

    /** Permet de retourner un objet Categories en fonction d'un ID
     * 
     * @param ID_categories Un ID d'une categorie
     * @return Un objet Categories
     */
    @Override
    public Categories find (Long ID_categories) {
        Categories category = em.find(Categories.class, ID_categories);
        return category;
    }

    /** Permet de mettre à jour une catégorie
     * 
     * @param category Envoie un objet category
     * @return Un boolean pour confirmer la modification
     */
    @Override
    public boolean update (Categories category) {
        //On vérifie que username n'existe pas
        Categories temp = find(category.getIDcategories());
        if(temp != null){
            em.merge(category);
            return true;
        }else {
            return false;
        }
    }

    /** Permet de retourner une liste de catégories en fonction d'un mot clés
     * 
     * @param pattern Un mot clés
     * @return Une liste de catégories
     */
    @Override
    public List<Categories> retrieveByName (String pattern) {
    pattern = "%" + pattern + "%";
    String q = "SELECT m FROM Categories m WHERE m.name LIKE :pattern";
    TypedQuery<Categories> query = em.createQuery(q, Categories.class);
    query.setParameter("pattern", pattern);
    List<Categories> category = query.getResultList();
    return category;
    }
    
    /** Permet de retourner une liste des catégories
     * 
     * @return Une liste des catégories
     */
    @Override
    public List<Categories> CategoriesFind () {
    String q = "SELECT c FROM Categories c"; //"SELECT * FROM articles ORDER BY articles.sold  DESC LIMIT 10"
    TypedQuery<Categories> query = em.createQuery(q, Categories.class);
    List<Categories> category = query.getResultList();
    return category;
    }
        
    /** Permet de retourner une catégorie en fonction d'un nom
     * 
     * @param pattern Un nom
     * @return Une catégorie
     */
    @Override
    public List<Categories> findCreateCategory (String pattern) {       
    String q = "SELECT m FROM Categories m WHERE m.name LIKE :pattern";
    TypedQuery<Categories> query = em.createQuery(q, Categories.class);
    query.setParameter("pattern", pattern);
    List<Categories> category = query.getResultList();
    return category;
    }
    
    /** Permet de retourner une liste des catégories
     * 
     * @return Une liste des catégories
     */
    @Override
    public List<Categories> findAll () {       
    String q = "SELECT m FROM Categories m";
    TypedQuery<Categories> query = em.createQuery(q, Categories.class);
    List<Categories> category = query.getResultList();
    return category;
    }
}
